package views;

// @Author: Gerrit Beyens
import core.logic.dataAccess.ZitplaatsDAO;
import core.models.dataModels.CheckinPlaatsReserverenModel;
import core.models.domainModel.Passagier;
import core.models.domainModel.Zitplaats;

import javax.swing.ButtonGroup;
import javax.swing.GroupLayout;
import javax.swing.GroupLayout.Alignment;
import javax.swing.JComboBox;
import javax.swing.JDialog;
import javax.swing.JLabel;
import javax.swing.LayoutStyle.ComponentPlacement;
import javax.swing.JButton;

import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;

import javax.swing.JRadioButton;
import javax.swing.JPanel;

import controllers.CheckinPlaatsReserverenController;

import java.awt.FlowLayout;
import java.awt.Dimension;

import javax.swing.border.EtchedBorder;

public class CheckinPlaatsReserverenView extends JDialog {

	// declaratie van variabelen:
	private static final long serialVersionUID = 1L;

	private CheckinPlaatsReserverenModel _model;
	private Passagier _passagier;

	private JComboBox<Zitplaats> cmbZitplaatsen;

	// designcode van de view:
	public CheckinPlaatsReserverenView(CheckinPlaatsReserverenModel model, boolean modal, Passagier p) {
		setSize(new Dimension(240, 195));
		setResizable(false);
		setModal(modal); // instellingen van dialoogscherm (modal of modeless)
		setTitle("Checkin - Plaats reserveren");
		// scherm standaardlocatie bij openen naar het center van het scherm
		// plaatsen:
		setLocationRelativeTo(null);

		this._model = model;
		this._passagier = p;

		cmbZitplaatsen = new JComboBox<Zitplaats>();
		cmbZitplaatsen.setEnabled(false);
		cmbZitplaatsen.setSize(new Dimension(28, 20));

		JLabel lblZitplaatsen = new JLabel("Zitplaats:");

		JButton btnAnnuleren = new JButton("Annuleren");
		btnAnnuleren.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				CheckinPlaatsReserverenController.handleViewCancel();
			}
		});

		JButton btnOK = new JButton("OK");
		btnOK.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				_model.setGeselecteerdeZitplaats((Zitplaats) cmbZitplaatsen.getSelectedItem());
				CheckinPlaatsReserverenController.handleViewOK(_model);
			}
		});

		ButtonGroup groupVoorkeur = new ButtonGroup();

		JPanel pnlVoorkeur = new JPanel();
		pnlVoorkeur.setBorder(new EtchedBorder(EtchedBorder.LOWERED, null, null));
		FlowLayout fl_pnlVoorkeur = (FlowLayout) pnlVoorkeur.getLayout();
		fl_pnlVoorkeur.setAlignment(FlowLayout.LEFT);

		GroupLayout groupLayout = new GroupLayout(getContentPane());
		groupLayout.setHorizontalGroup(groupLayout.createParallelGroup(Alignment.LEADING).addGroup(
				groupLayout
						.createSequentialGroup()
						.addContainerGap()
						.addGroup(
								groupLayout
										.createParallelGroup(Alignment.TRAILING, false)
										.addComponent(pnlVoorkeur, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE,
												GroupLayout.PREFERRED_SIZE)
										.addGroup(
												groupLayout.createSequentialGroup().addComponent(lblZitplaatsen)
														.addPreferredGap(ComponentPlacement.UNRELATED)
														.addComponent(cmbZitplaatsen, 0, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
										.addGroup(
												groupLayout.createSequentialGroup()
														.addComponent(btnAnnuleren, GroupLayout.PREFERRED_SIZE, 92, GroupLayout.PREFERRED_SIZE)
														.addPreferredGap(ComponentPlacement.RELATED).addComponent(btnOK)))
						.addContainerGap(39, Short.MAX_VALUE)));
		groupLayout.setVerticalGroup(groupLayout.createParallelGroup(Alignment.LEADING)
				.addGroup(
						groupLayout
								.createSequentialGroup()
								.addContainerGap()
								.addComponent(pnlVoorkeur, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE,
										GroupLayout.PREFERRED_SIZE)
								.addPreferredGap(ComponentPlacement.UNRELATED)
								.addGroup(
										groupLayout
												.createParallelGroup(Alignment.BASELINE)
												.addComponent(cmbZitplaatsen, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE,
														GroupLayout.PREFERRED_SIZE).addComponent(lblZitplaatsen))
								.addPreferredGap(ComponentPlacement.RELATED, 42, Short.MAX_VALUE)
								.addGroup(
										groupLayout.createParallelGroup(Alignment.BASELINE).addComponent(btnAnnuleren).addComponent(btnOK))
								.addGap(22)));

		JRadioButton rdbtnGeenVoorkeur = new JRadioButton("Geen voorkeur");
		pnlVoorkeur.add(rdbtnGeenVoorkeur);
		rdbtnGeenVoorkeur.setSelected(true);
		groupVoorkeur.add(rdbtnGeenVoorkeur);

		JRadioButton rdbtnVoorkeur = new JRadioButton("Voorkeur");
		pnlVoorkeur.add(rdbtnVoorkeur);
		groupVoorkeur.add(rdbtnVoorkeur);
		getContentPane().setLayout(groupLayout);

		rdbtnGeenVoorkeur.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				cmbZitplaatsen.setEnabled(false);

				cmbZitplaatsen.setSelectedIndex(0);
			}
		});

		rdbtnVoorkeur.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				cmbZitplaatsen.setEnabled(true);
			}
		});

		_model.setMogelijkeZitplaatsen(ZitplaatsDAO.getVrijeZitplaatsenByVluchtEnZitplaatstype(_passagier));

		// opvullen van combobox met vrije zitplaatsen van bepaalde vlucht
		cmbZitplaatsen.removeAllItems();
		for (Zitplaats zit : _model.getMogelijkeZitplaatsen()) {
			cmbZitplaatsen.addItem(zit);
		}

//		if (cmbZitplaatsen.getItemCount() == 0) {
//			String message = "vlucht volzet.";
//			if (_model.getZitplaatstype() == "E") {
//				message = "Klasse 'Economy' van deze vlucht is volzet.";
//			} else {
//				message = "Klasse 'Business' van deze vlucht is volzet.";
//			}
//			// help!! onderstaande code wil niet werken!!?
//			// if (_model.getZitplaatstype() == "B") {
//			// message = "Klasse 'Business' van deze vlucht is volzet.";
//			// }
//
//			JOptionPane.showMessageDialog(null, message, "Fout", JOptionPane.ERROR_MESSAGE);
//
//			CheckinPlaatsReserverenController.handleViewCancel();
//			// laatste lijn code geeft op onverklaarbare wijze een
//			// nullpointerexception?!
//		}
	}
}
